package com.ai.sort;

/**
 * @Author jia
 * @Description //选择排序：选择排序是一种简单直观的排序算法，无论什么数据进去都是 $O(n^2)$ 的时间复杂度。
 * 所以用到它的时候，数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。
 * 它的工作原理：首先在未排序序列中找到最小（大）元素，存放到排序序列的起始位置，然后，再从剩余未排序元素中继续寻找最小（大）元素，
 * 然后放到已排序序列的末尾。以此类推，直到所有元素均排序完毕
 * @Date 08:52 2024-10-18
**/
public class SelectionSort {

    public static int[] selectionSort(int[] arr) {
        // 外层循环用于遍历数组的每一个元素
        for (int i = 0; i < arr.length - 1; i++) {
            // 假设当前第 i 个元素是未排序部分中的最小值
            int minIndex = i;

            // 内层循环用于在未排序部分找到最小值
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    // 找到一个比当前 minIndex 指向的值更小的值，更新 minIndex
                    minIndex = j;
                }
            }

            // 如果找到了更小的值（即 minIndex 不等于当前的 i），进行交换
            if (minIndex != i) {
                int temp = arr[minIndex];
                arr[minIndex] = arr[i];
                arr[i] = temp;
            }
        }

        // 返回排序后的数组
        return arr;
    }


    public static void main(String[] args) {
        int[] arr = new int[]{5, 4, 3, 2, 1};
        System.out.println(arr);;
    }
}
